/**********************************************************************************************/
/* FBL_File_Posix.h																		      */
/*                                                                       					  */
/* Copyright Paradigma, 1993-2006                                        					  */
/* All Rights Reserved.                                                 					  */
/**********************************************************************************************/

#ifndef __FBL_File_Posix_h
#define __FBL_File_Posix_h
#pragma once

#include <VShared/FBL/publ/File_OS/FBL_File.h>

#include <VShared/FBL/publ/Headers/FBL_pre_header.h>


/**********************************************************************************************/
#if FBL_UNIX


/**********************************************************************************************/
FBL_Begin_Namespace


/**********************************************************************************************/
SMART_CLASS(File_Posix);


/**********************************************************************************************/
class FBL_SHARED_EXP_CLASS File_Posix : public File
{
		IMPLEMENT_UNKNOWN(File_Posix)											
		BEGIN_INTERFACE_TABLE(File_Posix)
			IMPLEMENT_INTERFACE(I_File)
			IMPLEMENT_INTERFACE(I_AspectHost)
		END_INTERFACE_TABLE()
 
    public://///////////////////////////////////////////////////////////////////////////////////

	enum SeekPosition { begin = 0x0, current = 0x1, end = 0x2 };

						File_Posix( void );
virtual					~File_Posix( void );


    public://///////////////////////////////////////////////////////////////////////////////////

// I_Storage

virtual bool 		   		get_IsOpen( void ) const throw()  { return (mFd != -1); }	
virtual bool				get_IsReadOnly( void ) const throw(){ return mReadOnly; }

virtual void 				Flush( void );


	protected:////////////////////////////////////////////////////////////////////////////////// 

// File

virtual void				DoClose( void );
virtual void				DoCreate( void );
virtual void				DoOpen( void );

virtual void				DoPutLength( flength aLength );

virtual flength				DoGetLengthOfClosed( void ) const throw();
virtual flength				DoGetLengthOfOpened( void ) const throw();

virtual void				DoThrowOut( void );

virtual ulong				DoRead( 
							char* 		inBuffer,
							flength		inFrom, 
							ulong 		inHowMuch );

virtual	ulong				DoWrite( 
							const char* inBuffer, 
							flength		inFrom, 
							ulong 		inHowMuch );


	protected:////////////////////////////////////////////////////////////////////////////////// 

// File_Posix

virtual flength				Seek( flength inOff, ushort inFrom );
	

	protected:////////////////////////////////////////////////////////////////////////////////// 
    	
		int				mFd;
};


/**********************************************************************************************/
FBL_End_Namespace


/**********************************************************************************************/
#endif // FBL_UNIX


/**********************************************************************************************/
#include <VShared/FBL/publ/Headers/FBL_post_header.h>


/**********************************************************************************************/
#endif // __FBL_File_Posix_h

